package com.chengshuang.log.annotation;

import com.chengshuang.log.enums.OperationLogTypeEnum;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 日志注解
 *
 * @author shuang.cheng
 * @date 2022/10/13
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogRecord {

    /**
     * 日志类型
     */
    OperationLogTypeEnum type();

    /**
     * 关联主键id
     */
    @SpelDynamicTemplate
    @CustomFunction
    String relationId() default "";

    /**
     * 操作人id
     */
    @SpelDynamicTemplate
    @CustomFunction
    String operatorId() default "";

    /**
     * 操作说明
     */
    @SpelDynamicTemplate
    @CustomFunction
    String description() default "";

    /**
     * 保存快照 本方法会比预处理的自定义函数还要先执行，同时也就意味着在自定义函数预执行阶段即可拿到缓存值
     */
    @SpelDynamicTemplate
    @SnapshotFunction
    String snapshot() default "";
}
